#ifndef _PARSER_HPP_
#define _PARSER_HPP_


#include"utli.hpp"

bool Readsrc_path(const std::string& src_path,std::vector<std::string>* file_list){
    namespace fs=boost::filesystem;
    fs::path fullpath(src_path);

    
    //判断路径是否存在
    if(!fs::exists(fullpath)){
        std::cerr<<src_path<<" not exists "<<std::endl;
        return false;
    }
    fs::recursive_directory_iterator end;
    for(fs::recursive_directory_iterator iter(fullpath); iter!= end; iter++){

        //判断是否为普通文件，HTML为普通文件
        if(!fs::is_regular_file(*iter)){
            continue;;
        }
        //判断是否为html文件
        if(iter->path().extension()!=".html")
        {
            continue;
        }
        //读取文件的目录
        //std::cout << "debug: " << iter->path().string() << std::endl;
        //使用移动构造提高效率
        file_list->push_back(iter->path().string());    
    }
    return true;
}

//解析网页
bool ParserHtml(const std::vector<std::string>&file_list,std::vector<file_info_t>* result){
    for(const std::string&file_path:file_list){
        //读取文件
        std::string file_result;
        if(!ns_util::Fileutil::ReadFile(file_path,&file_result)){
            continue;
        }        
        
        file_info_t info;
        //读取title
        if(!Parsertitle(file_result,&info)){
            continue;
        }
        //读取内容
        if(!ParserContent(file_result,&info)){
            continue;
        }
        //拼接网址
        if(!ParserUrl(file_path,&info)){
            continue;
        }
        //使用移动构造提高效率
        result->push_back(std::move(info));
    }
    return true;
}



//存储内容
//以  title\3content\3url\n  存储一个文件的信息，方便后续按照行的方式读取文件getline
bool SaveHtml(const std::vector<file_info_t>& reslut,const std::string& output){

#define SEP '\3'

    //以二进制的方式写入的方式打开文件
	std::ofstream ofs(output,std::ios_base::out | std::ios_base::binary);

    //如果打开失败
    if(!ofs.is_open()){
        std::cerr<<"open "<<output<<" failed! "<<std::endl;
        return false;
    }

    //拼接内容
    for(auto& re:reslut){
        std::string line;
        line=re.title;
        line+=SEP;
        line+=re.content;
        line+=SEP;
        line+=re.url;
        line+='\n';
        ofs.write(line.c_str(),line.size());
    }

    ofs.close();
    return true;
}




#endif